package cn.ibdsr.human.util;


import cn.ibdsr.human.exception.BizExceptionEnum;
import cn.ibdsr.human.exception.BusinessException;
import org.apache.commons.lang3.StringUtils;

import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;

/**
 * @description:
 * @author: cdl
 * @email: iamcimon@qq.com
 * @date: 2021/6/25 14:00
 */
public class DateUtils {
    public final static String NORM_DATETIME_PATTERN = "yyyy-MM-dd HH:mm:ss";

    public final static String NORM_DATETIME_PATTERN2 = "yyyyMMddHHmmss";

    public final static DateTimeFormatter FORMATTER_DATETIME = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");

    public final static DateTimeFormatter FORMATTER_DATETIME2 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");

    public final static String NORM_DATE_PATTERN = "yyyy-MM-dd";

    public final static String NORM_DATE_MONTH_PATTERN = "yyyy-M-d";

    public final static String NORM_DATE_PATTERN_1 = "yyyy年MM月dd日";

    public final static DateTimeFormatter FORMATTER_DATE = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    /**
     * 计算两个时间点的天数差
     *
     * @param dt1 第一个时间点
     * @param dt2 第二个时间点
     * @return int，即要计算的天数差
     */
    public static int dateDiff(LocalDateTime dt1, LocalDateTime dt2) {
        //获取第一个时间点的时间戳对应的秒数
        long t1 = dt1.toEpochSecond(ZoneOffset.ofHours(0));
        //获取第一个时间点在是1970年1月1日后的第几天
        long day1 = t1 / (60 * 60 * 24);
        //获取第二个时间点的时间戳对应的秒数
        long t2 = dt2.toEpochSecond(ZoneOffset.ofHours(0));
        //获取第二个时间点在是1970年1月1日后的第几天
        long day2 = t2 / (60 * 60 * 24);
        //返回两个时间点的天数差
        return (int) (day2 - day1);
    }

    /**
     * 判断某个时间是否过期
     *
     * @param timeFuture
     * @return
     */
    public static boolean isOverTime(String timeFuture) {
        if (StringUtils.isNotEmpty(timeFuture)) {
            //判断时间格式是否正确
            DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
            try {
                LocalDateTime playBeginDataTime = LocalDateTime.parse(timeFuture, df);
                if (playBeginDataTime.compareTo(LocalDateTime.now()) < 0) {
                    return true;
                }
                return false;

            } catch (Exception e) {
                throw new BusinessException(BizExceptionEnum.TIME_FORMAT_ERROR);
            }

        } else {
            throw new BusinessException(BizExceptionEnum.TIME_FORMAT_ERROR);
        }

    }


}
